package com.hsnn.medstgmini.trading.pur.controller;

import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.hsnn.medstgmini.Constants;
import com.hsnn.medstgmini.base.dict.model.form.DicAreaForm;
import com.hsnn.medstgmini.base.dict.service.DicAreaManager;
import com.hsnn.medstgmini.base.std.model.HospInfo;
import com.hsnn.medstgmini.base.std.model.StdHealthbureau;
import com.hsnn.medstgmini.sys.model.SysUser;
import com.hsnn.medstgmini.trading.pur.model.PurConfig;
import com.hsnn.medstgmini.trading.pur.service.PurConfigManager;
import com.hsnn.medstgmini.util.Pagination;
/**
 * @category 采购设置
 * @author 蔡春龙
 * @date 2015年6月14日
 */
@Controller
@RequestMapping("/purConfig")
public class PurConfigController {

	private static final Logger log = Logger.getLogger(PurConfigController.class);

	@Autowired
	private PurConfigManager purConfigManager;
	@Autowired
	private DicAreaManager dicAreaManager;

	@Autowired
	private HttpServletRequest request;
	@Value("#{sysProp['system.setpuDelNumConfig']}")
	private String setpuDelNumConfig;
	@Value("#{sysProp['system.province']}")
    private String sysProvince;
	
	@RequestMapping("/toPurConfig")
	public String toDicDrugformLogDetail(){
		List<PurConfig> list = purConfigManager.getPurConfigList();
		request.setAttribute("list", list);
		return "/trading/pur/purConfig";
		
	}
	
	/**
	 * 
	 *@category 跳向查看日常设置
	 *@author 邱磊
	 *@date 2015年11月19日 下午4:58:42
	 *@param 
	 *@return String
	 */
	@RequestMapping("/toSeePurConfig")
	public String toSeePurConfig(){
		List<PurConfig> list = purConfigManager.getPurConfigList();
		request.setAttribute("list", list);
		return "/trading/pur/seePurConfig";
		
	}
	
	/**
	 * @category 保存采购设置
	 * @date 2015年7月7日
	 * @return
	 */
	@RequestMapping("/savePurConfigList")
	@ResponseBody
	public Pagination savePurConfigList(String configs) {
		log.info("enter savePurConfig method");
		Pagination page = new Pagination(request);
		try {
			if (StringUtils.isNotBlank(configs)) {
				Gson gson = new Gson();
				Type type = new TypeToken<List<PurConfig>>() {
				}.getType();
				List<PurConfig> list = gson.fromJson(configs, type);
				purConfigManager.savePurConfig(list);
				page.setSuccess(true);
			}
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}
	/**
	 * 
	 *@category 跳向设置地区配送企业数页面
	 *@author 邱磊
	 *@date 2015年11月19日 上午10:30:05
	 *@param 
	 *@return String
	 */
	@RequestMapping("/toSetupAreaDel")
	public String toSetupAreaDel(){
		if (setpuDelNumConfig.equals(Constants.PROVINCE_DEL_NUM)){
			Map<String, Object> map = dicAreaManager.getEveyAreaDelNum();
			request.setAttribute("map", map);
			return "/trading/pur/setupEveryAreaDel";
		} else {
			if (setpuDelNumConfig.equals(Constants.COUNTY_DEL_NUM)){
				List<Map<String, Object>> list = dicAreaManager.getAreaByFatherId(sysProvince);
				request.setAttribute("list", list);
			}
		}
		return "/trading/pur/setupAreaDel";
	}
	
	/**
	 * 
	 *@category 跳向查看设置地区配送企业数页面
	 *@author 邱磊
	 *@date 2015年11月19日 上午10:30:05
	 *@param 
	 *@return String
	 */
	@RequestMapping("/toSeeSetupAreaDel")
	public String toSeeSetupAreaDel(){
		if (setpuDelNumConfig.equals(Constants.PROVINCE_DEL_NUM)){
			Map<String, Object> map = dicAreaManager.getEveyAreaDelNum();
			request.setAttribute("map", map);
			return "/trading/pur/seeSetupEveryAreaDel";
		} else {
			if (setpuDelNumConfig.equals(Constants.COUNTY_DEL_NUM)){
				List<Map<String, Object>> list = dicAreaManager.getAreaByFatherId(sysProvince);
				request.setAttribute("list", list);
			}
		}
		return "/trading/pur/seeSetupAreaDel";
	}
	
	/**
	 * 
	 *@category 获取设置地区配送企业数页面数据
	 *@author 邱磊
	 *@date 2015年11月19日 上午10:31:32
	 *@param 
	 *@return Pagination
	 */
	@SuppressWarnings("unchecked")
	@RequestMapping("/getSetupAreaDelDataList")
	@ResponseBody
	public Pagination getSetupAreaDelDataList(){
		Pagination page = new Pagination(request);
		SysUser user = (SysUser) request.getSession().getAttribute(Constants.USERINFO);
		if(user.getType() == 4){
			HospInfo hosp = user.getInfo();
			page.getConditions().put("orgArea", hosp.getArea().getAreaid());
		}
		if(user.getType()==6 || user.getType()==1){
			StdHealthbureau shb = user.getInfo();
			page.getConditions().put("orgArea", shb.getArea().getAreaid());
		}
		
		
		page.getConditions().put("areaCode", request.getParameter("areaCode"));
		page.getConditions().put("areaName", request.getParameter("areaName"));
		page.getConditions().put("fatherCode", request.getParameter("fatherCode"));
		page = dicAreaManager.getProvinceCounty(page);
		List<Map<String, Object>> list = (List<Map<String, Object>>) page.getRows();
		if (null != list && list.size() > 0){
			for (int i = 0; i < list.size(); i++){
				Map<String, Object> map = list.get(i);
				map.put("max_delnum_base", map.get("max_delnum_base")==null?"":map.get("max_delnum_base").toString());
				map.put("max_delnum_county", map.get("max_delnum_county")==null?"":map.get("max_delnum_county").toString());
			}
		}
		return page;
	}
	/**
	 * 
	 *@category 设置县区配送企业数
	 *@author 邱磊
	 *@date 2015年11月19日 上午10:58:17
	 *@param 
	 *@return Pagination
	 */
	@RequestMapping("/setDelNum")
	@ResponseBody
	public Pagination setDelNum(String array){
		Pagination page =  new Pagination();
		if (StringUtils.isNotBlank(array)){
			Gson gson = new Gson();
			Type type = new TypeToken<List<DicAreaForm>>() {
			}.getType();
			List<DicAreaForm> list = gson.fromJson(array, type);
			try {
				page = purConfigManager.setDelNum(list);
				
			} catch (Exception e) {
				log.error("更新县区最大配送企业数，", e);
				page.setSuccess(false);
				page.setMsg("设置失败！");
			}
		} else {
			page.setSuccess(false);
			page.setMsg("请选择要设置的地区！");
		}
		return page;
	}
	/**
	 * 
	 *@category 设置每一个县
	 *@author 邱磊
	 *@date 2015年11月19日 下午2:28:07
	 *@param 
	 *@return Pagination
	 */
	@RequestMapping("/setupEveryAreaDel")
	@ResponseBody
	public Pagination setupEveryAreaDel(){
		Pagination page = new Pagination();
		page.getConditions().put("baseDelNum", request.getParameter("baseDelNum"));
		page.getConditions().put("countyDelNum", request.getParameter("countyDelNum"));
		try {
			purConfigManager.setupEveryAreaDel(page);
			page.setSuccess(true);
			page.setMsg("设置成功！");
		} catch (Exception e) {
			log.error("每县区设置最大配送企业数：", e);
			page.setSuccess(false);
			page.setMsg("设置失败！");
		}
		return page;
	}
	
	
}
